<?php

namespace app\library;

/**
 * 位置处理类
 * Class Position
 * @package app\library
 */
class Position {

    /**
     * 根据两点间的经纬度计算距离
     * @param float $lat1 地点a的纬度值
     * @param float $lng1 地点a的经度值
     * @param float $lat2 地点b的纬度值
     * @param float $lng2 地点b的经度值
     * @return float
     */
    public static function getDistance($lat1, $lng1, $lat2, $lng2) {
        //将角度转为狐度
        $radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
        $radLat2 = deg2rad($lat2);
        $radLng1 = deg2rad($lng1);
        $radLng2 = deg2rad($lng2);
        $a = $radLat1 - $radLat2;
        $b = $radLng1 - $radLng2;
        $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137;
        return $s;
    }

    /**
     * 根据经纬度和半径求取
     * @param float $lat 纬度
     * @param float $lng 经度
     * @param int $radius 单位米
     * @return array
     */
    public static function getAround($lat, $lng, $radius) {
        $PI = 3.14159265;

        $latitude = $lat;
        $longitude = $lng;

        $degree = (24901 * 1609) / 360.0;
        $radiusMile = $radius;

        $dpmLat = 1 / $degree;
        $radiusLat = $dpmLat * $radiusMile;
        $minLat = $latitude - $radiusLat;
        $maxLat = $latitude + $radiusLat;

        $mpdLng = $degree * cos($latitude * ($PI / 180));
        $dpmLng = 1 / $mpdLng;
        $radiusLng = $dpmLng * $radiusMile;
        $minLng = $longitude - $radiusLng;
        $maxLng = $longitude + $radiusLng;

        $result = [
            'minLat' => $minLat,
            'maxLat' => $maxLat,
            'minLng' => $minLng,
            'maxLng' => $maxLng,
        ];
        return $result;
    }

}
